class Client < ActiveRecord::Base
  belongs_to :user
  has_many :orders

  scope :active, where("state = 'active'")

  validates :name, :presence => { :message => 'Debe ingresar un nombre / razón social válido.' }
  validates :cuit, :presence => { :message => 'Debe ingresar un CUIT válido.' }, :uniqueness => {:message => 'El CUIT ya corresponde a un cliente registrado'}
  validates :address, :presence => { :message => 'Debe ingresar una dirección válida.' }
  validates :province, :presence => { :message => 'Debe ingresar una provincia / localidad válida.' }
  validates :email, :presence => { :message => 'Debe ingresar un email válido.' }, :uniqueness => {:message => 'El email ya corresponde a un cliente registrado'}
  validates :email, :format => {:with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, :message => 'El formato especificado en el email es inválido'}, :unless => Proc.new { |client| client.email.blank? }
  validates :phone, :presence => { :message => 'Debe ingresar un teléfono válido.' }
  validates :zip_code, :presence => { :message => 'Debe ingresar un código postal válido.' }

  def destroy_client
    # If it has orders, it won't be deleted, just mark as such.
    if self.orders.blank?
      self.user.destroy
      self.destroy
    else
      self.mark_as_deleted
    end
  end

  def mark_as_deleted
    self.update_attribute(:state, 'deleted')
  end

  def self.search(keywords)
    Client.where("name like ?", "%#{keywords}%")
  end
end
